package com.jianbo.proxy.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegUtil {
    
    public static boolean find(String target, String regexp) {
        if(regexp.startsWith("#")) {
            regexp = regexp.substring(1);
            regexp = toRegExp(regexp);
        }
        if(!regexp.startsWith("^")) {
            regexp = "^" + regexp;
        }
        if(!regexp.endsWith("$")) {
            regexp = regexp + "$";
        }
        // if(target.equals("/js/hello.js")) {
        //     Debug.info("Final:" + regexp);
        // }
        return match(target, regexp);
    }

    public static boolean match(String target, String regexp) {
        // 创建Pattern对象并编译正则表达式
        Pattern pattern = Pattern.compile(regexp);
        
        // 创建Matcher对象并将输入文本传递给它
        Matcher matcher = pattern.matcher(target);
        
        // 判断是否有匹配结果
        return matcher.find();
    }

    /**
     * 简易表达式替换成正则表达式
     * 1. * 匹配单层路径
     * 2. ** 匹配多层路径
     * 3. . 匹配 .
     * @param regexp
     * @return
     */
    public static String toRegExp(String easyExp) {
        String regexp = easyExp;
        if(regexp.startsWith("#")) {
            regexp = regexp.substring(1);
        }
        // . 替换成 \.
        regexp = regexp.replaceAll("\\.", "\\\\\\."); // \.
        // 两个星匹配任意字符 (** 替换成 [\s\S]star)
        regexp = regexp.replaceAll("\\*\\*", "[\\\\s\\\\S]star"); // [\s\S]
        // 一个星匹配任意不包含路径的字符 (* 替换成 [^/\\\s\S]star)
        regexp = regexp.replaceAll("\\*", "[^/\\\\\\\\&&\\\\s\\\\S]star"); // [^/\\&&\s\S]
        // star 替换成 *
        regexp = regexp.replaceAll("star", "*");
        return regexp;
    }

    public static boolean findEasy(String target, String regexp) {
        
        regexp = toRegExp(regexp);

        return match(target, regexp);
    }
}
